package com.power.sifa.approve.service;

import com.plf.common.domain.PageDataResponse;
import com.plf.common.exception.BusinessException;
import com.power.sifa.approve.model.Apl_admreview_similarity;
import com.power.sifa.approve.model.Apl_target;
import com.power.sifa.approve.model.pojo.vo.AdmireTargetVO;
import com.power.sifa.statistics.model.pageInfo.StatisticsInfo;
import org.springframework.data.domain.Page;
import com.power.sifa.approve.model.Apl_admreview;
import com.power.sifa.approve.model.pageInfo.Apl_admreviewPageInfo;

import java.io.Serializable;
import java.util.List;
import java.util.Map;

/**
 *  行政复议申请业务层
 */
public interface Apl_admreviewService {

    /**
     *  根据id获取行政复议申请对象
     */
    Apl_admreview getById(Serializable id);

    /**
     *  根据传入行政复议申请对象进行新增或更新操作
     */
    void saveOrUpdate(Apl_admreview apl_admreview);

    /**
     *  根据id删除行政复议申请
     */
    void removeById(Serializable id);

    /**
     *  根据传入条件查询行政复议申请分页结果
     */
    Page<Apl_admreview> findAll(Apl_admreviewPageInfo pageInfo);

    /**
     * 查询全部行政复议申请
     */
    List<Apl_admreview> findAll();

     /**
     *  根据id批量删除行政复议申请
     */
    void removeByIds(List<Integer> list);

     /**
     *  批量保存行政复议申请
     */
    void saveAll(List<Apl_admreview> list);

    /**
     *  查询行政复议案件联合主表分页结果
     */
    PageDataResponse findJoinAll(Apl_admreviewPageInfo pageInfo);

    /**
     * 行政复议联-根据相似度查询对应的相似行政复议申请
     * @param applyId
     * @return
     */
    List<Apl_admreview_similarity> getSimilarityReview(String applyId);


    /**
     * 更新业务主表状态
     * @param id
     * @param status
     */
    void updateStatus(String id, Integer status);

    /**
     * 更新被申请人
     * @param applyid
     * @param targetname
     * @param targetadid
     */
    void updateTargetName(String applyid, String targetname, String targetadid, Map<String,Apl_target> targetInfo) throws BusinessException;

    /**
     * 更新业务主表子状态
     * @param id
     * @param sonstatus
     */
    void updatesSonStatus(String id, String sonstatus);


    /**
     * 更新被申请人是否答复字段和答复时限
     * @param applyid
     * @param reply
     */
    void updateTargetReply(String applyid, Boolean reply);


    /**
     * 获取对应的行政复议子状态
     * @param applyid
     * @return
     */
    List<String> getSonStatusByIds(String applyid);


    /**
     * 更新业务主表决定类型
     * @param id
     * @param decisiontype
     * @param childId
     * @param childName
     */
    void updatesDecisiontype(String id, Integer decisiontype, Integer childId, String childName);


    /**
     * 归档阶段的数据分页查询
     * @param pageInfo
     * @return
     */
    PageDataResponse queryArchivePage(Apl_admreviewPageInfo pageInfo);

    /**
     * 更新受理第一/第二 立案审查人
     * @param id
     * @param firstuserid
     * @param firstusername
     * @param seconduserid
     * @param secondusername
     */
    void updatesAcceptExamineUsers(String id, String firstuserid, String firstusername, String seconduserid, String secondusername);

    /**
     * 更新审理第一/第二 立案审查人
     * @param id
     * @param firstuserid
     * @param firstusername
     * @param seconduserid
     * @param secondusername
     */
    void updatesHearExamineUsers(String id, String firstuserid, String firstusername, String seconduserid, String secondusername);


    /**
     * 通过applyic查询申请人信息
     *
     * @param applyid
     * @return
     */
    AdmireTargetVO getAdmreviewInfoAndCheckDoc(String applyid);

    /**
     * 查询子流程的案由
     * @param prtype
     * @return
     */
    String getReason(Integer prtype);

    /**
     * 查询子流程的行政复议理由
     * @param admreObj
     * @return
     */
    String getAdmreReason(Apl_admreview admreObj);


    /**
     * 查询全部完结的行政复议申请
     */
    List<Apl_admreview> findAllEndedList();


    /**
     * 查询对应状态的行政复议申请
     * @param status
     * @return
     */
    List<Apl_admreview> findAllReviewByStatus(List<String> status);

    /**
     * 更新业务主表程序类型
     * @param proctype
     * @return
     */
    void updateProctype(String id, Integer proctype);

    /**
     * 更新业务主表决定时间
     * @param id
     * @param decisiondate
     */
    void updateDecisiondate(String id, String decisiondate);

    /**
     * 大屏统计-统计审理中的状态
     * @return
     */
    Long countPorcessingCaseStatus(StatisticsInfo info);

    /**
     * 大屏统计-统计已审结的状态
     * @return
     */
    Long countEndedCaseStatus(String acceptadid);

    /**
     * 大屏统计-统计中止状态的数据
     * @return
     */
    Long countSuspendCaseStatus(String acceptadid);

    /**
     * 更新业务主表期满日期
     * @param id
     * @param quedate
     */
    void updateQuedate( String id, String quedate);

    /**
     * 更新承办人
     * @param id
     * @param firstuserid
     * @param firstusername
     */
    void updatesFirstUser(String id, String firstuserid, String firstusername);

    /**
     * 更新协办人
     * @param id
     * @param seconduserid
     * @param secondusername
     */
    void updatesSecondUser(String id, String seconduserid, String secondusername);


    /**
     * 更新审理承办人
     * @param id
     * @param firstuserid
     * @param firstusername
     */
    void updatesHearFirstUser(String id, String firstuserid, String firstusername);

    /**
     * 更新审理协办人
     * @param id
     * @param seconduserid
     * @param secondusername
     */
    void updatesHearSecondUser(String id, String seconduserid, String secondusername);


    /**
     * 通过id查询对应的行政复议记录
     * @param ids
     * @return
     */
    List<Apl_admreview> findAdmreviewList(List<String> ids);
}
